home *** CD-ROM | disk | FTP | other *** search
/ Aminet 24 / Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso / Aminet / dev / c / AmiVoGL_MDEV.lha / examples / fshapes.F < prev    next >
Text File  |  1991-06-03  |  4KB  |  163 lines

  1.     program fshapes
  2.  
  3. #ifdef SGI
  4. #include "fgl.h"
  5. #include "fdevice.h"
  6. #else
  7. #include "fvogl.h"
  8. #include "fvodevice.h"
  9. #endif
  10.  
  11. c
  12. c This program shows some of the simple primitives.
  13. c
  14.     integer edgel
  15.     integer *2 val, vminx, vmaxx, vminy, vmaxy
  16. c
  17. c open a window (or the screen on some devices)
  18. c
  19.     call prefsi(512, 600)
  20.     call winope('shapes', 6)
  21.     call unqdev(INPUTC)
  22.  
  23. c the two lines below clear the screen to white if we have
  24. c colours, on a monochrome device color is ignored so the
  25. c screen will be cleared to its background color, normally black.
  26. c
  27.     call color(BLACK)
  28.     call clear()
  29.  
  30. c
  31. c set the screen to be 2.0 units wide and 2.0 units wide, with
  32. c the drawable coordinates going from -1.0 to 1.0.
  33. c
  34.     call ortho2(-1.0, 1.0, -1.0, 1.0)
  35.  
  36.     call color(MAGENT)
  37.  
  38. c
  39. c okay, so we want to draw in the range -1 to 1, but we
  40. c only want to draw in the top lefthand corner of the
  41. c screen. The call to viewpo allows us to do this. As
  42. c viewpo always takes screen coordinates, we need to
  43. c call getviewpo to found out how big our screen is
  44. c at the moment. We use the values returned from getviewpo
  45. c calculate the positions for our new viewpo. We note
  46. c that on an Iris (0,0) is the bottom left pixel.
  47. c
  48.     call getvie(vminx, vmaxx, vminy, vmaxy)
  49.  
  50.     maxx = vmaxx
  51.     minx = vminx
  52.     maxy = vmaxy
  53.     miny = vminy
  54.  
  55.     call viewpo(minx, (maxx - minx) / 2, (maxy - miny) / 2, maxy)
  56.  
  57. c
  58. c  write out a heading 
  59. c
  60.     call cmov2(-0.9, -0.5)
  61.     call charst('rect', 4)
  62.  
  63. c
  64. c draw a rectangle around the points (-0.2, -0.2), (-0.2, 0.2),
  65. c (0.3, 0.2), and (0.3, -0.2).
  66. c
  67.     call rect(-0.2, -0.2, 0.3, 0.2)
  68.  
  69.     call color(BLUE)
  70.  
  71. c
  72. c now we want to draw in the top right corner of the screen,
  73. c and we want to draw a circular circle so we must make sure
  74. c our viewpo is square (if it isn't we'll get an ellipse),
  75. c so we calculate the shortest edge and set up a viewpo which
  76. c is in the top right region of the screen, but doesn't necessarilly
  77. c occupy all the top right corner.
  78. c
  79. c find smallest edge 
  80. c
  81.     if (maxx - minx .gt. maxy - miny) then
  82.         edgel = (maxy - miny) / 2
  83.     else 
  84.         edgel = (maxx - minx) / 2
  85.     end if
  86.  
  87. c
  88. c create a square viewpo - otherwise the circle will look
  89. c like an ellipse.
  90. c
  91.  
  92.     call viewpo((maxx - minx) / 2, (maxx - minx) / 2 + edgel,
  93.      +           (maxy - miny) / 2, (maxy - miny) / 2 + edgel)
  94.  
  95.     call cmov2(-0.9, -0.5)
  96.     call charst('circle', 6)
  97.  
  98. c
  99. c draw a circle of radius 0.4 around the point (0.0, 0.0)
  100. c
  101.     call circ(0.0, 0.0, 0.4)
  102.  
  103.     call color(GREEN)
  104.  
  105. c
  106. c bottom left hand corner.
  107. c
  108.     call viewpo(minx, (maxx - minx) / 2,
  109.      +                miny, (maxy - miny) / 2)
  110.  
  111.     call cmov2(-0.9, -0.5)
  112.     call charst('ellipse', 7)
  113.  
  114. c
  115. c To draw an ellipse we change the aspect ratio so it is no longer
  116. c 1 and call circ. In this case we use ortho2 to make the square
  117. c viewpo appear to be higher than it is wide. Alternatively you
  118. c could use arc to construct one.
  119. c
  120. c The call to pushmatrix saves the current viewing transformation.
  121. c After the ortho2 has been done, we restore the current viewing
  122. c transformation with a call to popmatrix. (Otherwise everything
  123. c after the call to ortho would come out looking squashed as the
  124. c world aspect ratio is no longer 1).
  125. c
  126.     call pushma
  127.         call ortho2(-1.0, 1.0, -1.0, 2.0)
  128.         call circ(0.0, 0.5, 0.4)
  129.     call popmat
  130.  
  131.     call color(RED)
  132.  
  133. c
  134. c bottom right hand corner
  135. c
  136.     call viewpo((maxx - minx) / 2, maxx,
  137.      +                 miny, (maxy - miny) / 2)
  138.  
  139.     call cmov2(-0.9, -0.5)
  140.     call charst('arc', 3)
  141.  
  142. c
  143. c draw an arc centered at (0.0, 0.0), radius of 0.4. 0.0 is the start
  144. c angle and 90.0 is the end angle of the arc being drawn. So this
  145. c draws a quarter circle - unless our viewpo isn't square.
  146. c
  147.     call arc(0.0, 0.0, 0.4, 0, 900)
  148.  
  149. c
  150. c we want to stop after a keyboard event
  151. c
  152.     call qdevic(KEYBD)
  153.  
  154. c
  155. c wait for the event
  156. c
  157.     idum = qread(val)
  158.  
  159.     call gexit
  160.  
  161.     end
  162.